/*
 * File:   newForm.cpp
 * Author: Ana Paula
 *
 * Created on 3 de Julho de 2011, 11:53
 */

#include "newForm.h"
#include "Jogo.hpp"
#include <QMessageBox>
#include <iostream>
#include "equipe.h"


using namespace jogodavelharedes;

newForm::newForm() {
    widget.setupUi(this);
    connect(this->widget.pushButton, SIGNAL(clicked()), this, SLOT(botao1()));
    connect(this->widget.pushButton_2, SIGNAL(clicked()), this, SLOT(botao2()));
    connect(this->widget.pushButton_3, SIGNAL(clicked()), this, SLOT(botao3()));
    connect(this->widget.pushButton_4, SIGNAL(clicked()), this, SLOT(botao4()));
    connect(this->widget.pushButton_5, SIGNAL(clicked()), this, SLOT(botao5()));
    connect(this->widget.pushButton_6, SIGNAL(clicked()), this, SLOT(botao6()));
    connect(this->widget.pushButton_7, SIGNAL(clicked()), this, SLOT(botao7()));
    connect(this->widget.pushButton_8, SIGNAL(clicked()), this, SLOT(botao8()));
    connect(this->widget.pushButton_9, SIGNAL(clicked()), this, SLOT(botao9()));
    connect(this->widget.actionIniciar, SIGNAL(triggered()), this, SLOT(iniciar()));
    connect(this->widget.actionEquipe_2011_1, SIGNAL(triggered()), this, SLOT(sobreEquipe()));
    this->o = new QIcon("O.png");
    this->x = new QIcon("X.png");
    this->setFixedSize(390, 460);
}

newForm::~newForm() {
}

void newForm:: atualizaJogador() {
    
    if (this->jogo->jogadorDaVez() == this->jogo->getJogador1()) {
        
        this->widget.label->setText("Jogador da Vez: Jogador 1");
    } else {
        
        this->widget.label->setText("Jogador da Vez: Jogador 2");
    }
}

void newForm:: botao1(bool up) {

    std::cout << "botao1" << up << std::endl;
    if (up || this->jogo->jogadorDaVez() == this->lj) {
        
        if (this->jogo->ehJogadaValida(0, 0)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton->setIcon(*this->x);
                this->widget.pushButton->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton->setIcon(*this->o);
                this->widget.pushButton->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'0', '0'};
                std::cout << "Writing: {0, 0}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {0, 0}" << std::endl;
            }
            
            this->jogo->fazerJogada(0, 0);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: botao2(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(0, 1)) {

            std::cout << this->jogo->jogadorDaVez()->getSimbolo() << std::endl;
            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_2->setIcon(*(this->x));
                this->widget.pushButton_2->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_2->setIcon(*(this->o));
                this->widget.pushButton_2->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'0', '1'};
                std::cout << "Writing: {0, 1}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {0, 1}" << std::endl;
            }

            this->jogo->fazerJogada(0, 1);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: botao3(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {
        if (this->jogo->ehJogadaValida(0, 2)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_3->setIcon(*this->x);
                this->widget.pushButton_3->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_3->setIcon(*this->o);
                this->widget.pushButton_3->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'0', '2'};
                std::cout << "Writing: {0, 2}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {0, 2}" << std::endl;
            }

            this->jogo->fazerJogada(0, 2);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }

}

void newForm:: botao4(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(1, 0)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_4->setIcon(*this->x);
                this->widget.pushButton_4->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_4->setIcon(*this->o);
                this->widget.pushButton_4->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'1', '0'};
                std::cout << "Writing: {1, 0}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {1, 0}" << std::endl;
            }

            this->jogo->fazerJogada(1, 0);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: botao5(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(1, 1)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_5->setIcon(*this->x);
                this->widget.pushButton_5->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_5->setIcon(*this->o);
                this->widget.pushButton_5->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'1', '1'};
                std::cout << "Writing: {1, 1}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {1, 1}" << std::endl;
            }

            this->jogo->fazerJogada(1, 1);
            this->atualizaJogador();
            this->verificaFimJogo();
        }

    }
}

void newForm:: botao6(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(1, 2)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_6->setIcon(*this->x);
                this->widget.pushButton_6->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_6->setIcon(*this->o);
                this->widget.pushButton_6->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'1', '2'};
                std::cout << "Writing: {1, 2}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {1, 2}" << std::endl;
            }

            this->jogo->fazerJogada(1, 2);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: botao7(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(2, 0)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_7->setIcon(*this->x);
                this->widget.pushButton_7->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_7->setIcon(*this->o);
                this->widget.pushButton_7->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'2', '0'};
                std::cout << "Writing: {2, 0}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {2, 0}" << std::endl;
            }

            this->jogo->fazerJogada(2, 0);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: botao8(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(2, 1)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_8->setIcon(*this->x);
                this->widget.pushButton_8->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_8->setIcon(*this->o);
                this->widget.pushButton_8->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'2', '1'};
                std::cout << "Writing: {2, 1}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {2, 1}" << std::endl;
            }

            this->jogo->fazerJogada(2, 1);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: botao9(bool up) {

    if (up || this->jogo->jogadorDaVez() == this->lj) {

        if (this->jogo->ehJogadaValida(2, 2)) {

            if (this->jogo->jogadorDaVez()->getSimbolo() == 'X') {

                this->widget.pushButton_9->setIcon(*this->x);
                this->widget.pushButton_9->setIconSize(QSize(130, 100));
            } else {

                this->widget.pushButton_9->setIcon(*this->o);
                this->widget.pushButton_9->setIconSize(QSize(130, 100));
            }

            if (!up) {

                unsigned char sr[] = {'2', '2'};
                std::cout << "Writing: {2, 2}" << std::endl;
                this->pc->escreve(0, 2, sr);
                std::cout << "Done: {2, 2}" << std::endl;
            }

            this->jogo->fazerJogada(2, 2);
            this->atualizaJogador();
            this->verificaFimJogo();
        }
    }
}

void newForm:: verificaFimJogo() {
    if (this->jogo->verificaFimDoJogo()) {
        QMessageBox mensagem(this->widget.centralwidget);

        QString* r;
        if (jogo->houveVencedor()) {
            if (jogo->getVencedor() == jogo->getJogador1()){

                r = new QString("Jogador 1 ganhou");
            } else {

                r = new QString("Jogador 2 ganhou");
            }
        } else {

            r = new QString("Deu velha.");
        }

        this->widget.pushButton->setEnabled(false);
        this->widget.pushButton_2->setEnabled(false);
        this->widget.pushButton_3->setEnabled(false);
        this->widget.pushButton_4->setEnabled(false);
        this->widget.pushButton_5->setEnabled(false);
        this->widget.pushButton_6->setEnabled(false);
        this->widget.pushButton_7->setEnabled(false);
        this->widget.pushButton_8->setEnabled(false);
        this->widget.pushButton_9->setEnabled(false);
        this->widget.label->setText(*r);
        mensagem.setText(*r);
        mensagem.show();
        mensagem.exec();
        delete r;
    }

}

void newForm:: iniciar() {
    this->jogo->iniciar();
    this->atualizaJogador();
    QIcon null = QIcon();
    this->widget.pushButton->setIcon(null);
    this->widget.pushButton_2->setIcon(null);
    this->widget.pushButton_3->setIcon(null);
    this->widget.pushButton_4->setIcon(null);
    this->widget.pushButton_5->setIcon(null);
    this->widget.pushButton_6->setIcon(null);
    this->widget.pushButton_7->setIcon(null);
    this->widget.pushButton_8->setIcon(null);
    this->widget.pushButton_9->setIcon(null);
    this->widget.pushButton->setEnabled(true);
    this->widget.pushButton_2->setEnabled(true);
    this->widget.pushButton_3->setEnabled(true);
    this->widget.pushButton_4->setEnabled(true);
    this->widget.pushButton_5->setEnabled(true);
    this->widget.pushButton_6->setEnabled(true);
    this->widget.pushButton_7->setEnabled(true);
    this->widget.pushButton_8->setEnabled(true);
    this->widget.pushButton_9->setEnabled(true);

}

void newForm::sobreEquipe() {

    equipe* sobre = new equipe();
    sobre->setParent(this);
    sobre->setWindowModality(Qt::WindowModal);
    sobre->setWindowFlags(Qt::Window);
    sobre->show();
    sobre->exec();
    
}